function addSquare(a, b) {

    return square(a) + square(b)

    function square(x) {
        return x * x
    }
}

function add(x) {
    function add2(y) {
        return x + y;
    }

    // 将内部定义的函数返回
    return add2
}

let fun = () => {
}

let res1 = addSquare(3, 4) //
// 调用内部函数 1
let res2 = add(1) // 内部的函数  add2(y) {return 1 + y}
let res3 = res2(2)
console.log(res1)
console.log(res2)
console.log(res3)
// 调用内部函数 2
let res4 = add(1)(2) // 3

// 如果没有默认参数，实参小于形参，可能导致NaN ，使用默认参数可以解决这个问题
// 默认参数只会在参数值是 undefined时生效
function func(a = 1, b = 3, c = 0) {
    // js 中函数有一个默认的参数 arguments 包含所有的参数信息
    console.log(arguments)
    return a + b + c;
}

// 可变长度参数 参数当做数组去用
function func2(...a) {
    let sum = 0;
    for (let i = 0; i < a.length; i++) {
        sum += a[i]
    }
    return sum
}

let res = func(1, 2)
console.log(res)

// 1. 获取对象
let xhr = new XMLHttpRequest()

// 2. 打开连接 请求方式 请求的url 是否异步
// 异步和同步：
xhr.open("GET", "/list", true)
// 3. 发送请求
xhr.send()
// 4. 接受响应 onreadystatechange --> 监听 xhr对象的readystate的变化状态
xhr.onreadystatechange = () => {
    console.log(xhr.readyState)
    // 值变化成4 说明请求结束  status 是200 说明请求成功
    if (xhr.readyState === 4 && xhr.status === 200) {
        // 服务端响应的内容在 responseText 属性中
        console.log(xhr.responseText)
        // 对象 --> JSON字符串 JSON.stringify(obj)
        let resp = JSON.parse(xhr.responseText) // json-->对象
        if (resp.code === 1) { // 业务逻辑是否 ok
            console.log("操作可以执行")

        } else {
            // 业务逻辑错误的操作
        }
        console.log(resp.data)
        // console.log(resp.data)
        // console.log(resp.code)
        // console.log(resp.msg)
    }

}


document.querySelector("#btn").onclick = () => {
    // 用于封装 post 请求发送的参数
    let formData = new FormData()
    formData.set("name", document.querySelector("[name='name']").value)
    formData.set("price", document.querySelector("[name='price']").value)
    let xhr = new XMLHttpRequest()
    xhr.open("POST", "http://localhost:8080/test", true)
    xhr.send(formData) // 发送 POST 携带数据
    xhr.onreadystatechange = () => {
        if (xhr.readyState === 4 && xhr.status === 200) {
            console.log(xhr.responseText)
        }
    }
}

function send() {
    let xhr = new XMLHttpRequest()
    xhr.open("POST", "http://localhost:8080/test", true)
    // xhr.send(formData) // 发送 POST 携带数据
    xhr.onreadystatechange = () => {
        if (xhr.readyState === 4 && xhr.status === 200) {
            return xhr.responseText
        } else {
            return "null"
        }
    }
}

let re = send()
console.log(re)

function testSend() {
    // resolve--> 正常完成要执行的回调
    // reject --> 错误要执行的回调
    return new Promise((resolve, reject) => {
        let xhr = new XMLHttpRequest()
        xhr.open("get", "http://localhost:8080/get", true)
        xhr.send()
        // 请求成功
        xhr.onload = () => {
            console.log("请求成功")
            resolve(xhr.responseText)
        }
        // 请求失败
        xhr.onerror = () => {
            console.log("请求失败")
            reject(xhr)
        }
    })
}

// axios().then().catch()
// let r = testSend()
// // then -- resolve
// let t = r.then((resp) => {
//     console.log(resp)
//     return resp
// }).catch((error) => {
//     console.log("catch")
//     console.log(error)
// })

// console.log(t)

// promise.then()  promise.catch()
// axios().then().catch()
                                                // 此时拿到的res就是服务端返回的内容
// fetch(url).then(resp => return resp.json()).then(res => console.log(res)).catch(error => console.log(error))
function send2() {
    fetch("http://localhost:8080/get").then((resp) => {
        return resp.json()
    }).then((res) => {
        console.log(res)
    }).
    catch((error) => {
        console.log(error)
    })
}


